/**
 * Copyright(c) 2013 Jade Techonologies Co., Ltd.
 *
 * History:
 *   14-7-28 下午12:05 Created by dwzhang
 */
package com.jade.framework.base.comm;

import java.io.IOException;

/**
 * 消息编解码器。
 *
 * @author dwzhang
 * @version 1.0 14-7-28 下午12:05
 */
public interface MessageCodec<Input, Output>
{
    /**
     * 编码消息。
     *
     * @param session 协议会话
     * @param output 数据输出
     * @param message 消息对象
     * @throws IOException 编码异常
     */
    public void encode(ProtocolSession session, Output output, Object message)
            throws IOException;

    /**
     *  解码消息。
     *
     * @param session 协议会话
     * @param input 数据输入
     * @return 解码后的消息。
     * @throws IOException
     */
    public Object decode(ProtocolSession session, Input input)
            throws IOException;

    /** NEED_MORE_INPUT 表示还需要更多的数据 */
    enum DecodeResult
    {
        NEED_MORE_INPUT, SKIP_SOME_INPUT
    }
}
